<!DOCTYPE HTML>
<html lang="zh">
<head>
<title>StrSplit() - Syntax &amp; Usage | AutoHotkey</title>
<meta name="description" content="The StrSplit function separates a string into an array of substrings using the specified delimiters." />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link href="../static/theme.css" rel="stylesheet" type="text/css" />
<script src="../static/content.js" type="text/javascript"></script>
</head>
<body>

<h1>StrSplit() <span class="ver">[v1.1.13+]</span></h1>
<p>使用指定的分隔符把一个字符串分解成多个子字符串并保存到数组中.</p>
<pre class="Syntax">
Array := <span class="func">StrSplit</span>(String <span class="optional">, Delimiters, OmitChars, MaxParts</span>)</pre>

<h2 id="Parameters">参数</h2>
<dl>

  <dt>String</dt>
  <dd><p>要分割的字符串.</p></dd>

  <dt>Delimiters</dt>
  <dd>
    <p>如果此参数为空或省略, 那么将把输入字符串中的每个字符解析为单独的子字符串.</p>
    <p>否则, <em>Delimiters</em> 可以是单个字符串或字符串数组, 数组中的每个字符串都被用来确定子字符串之间的边界. 由于分隔符本身不被视为子字符串的一部分, 所以它们不会被包含在返回的数组中. 此外, 如果输入字符串中一对分隔符之间没有其他字符, 那么相应的数组元素会被置空.</p>
    <p>例如: <code>","</code> 将根据逗号每次出现的位置分割字符串. 同样地, 使用 <code>[A_Tab, A_Space]</code> 作为分隔符将在输入字符串中每次遇到空格或 tab 时创建一个新的数组元素.</p>
  </dd>

  <dt>OmitChars</dt>
  <dd>
    <p>可选的字符列表(区分大小写), 用来从每个数组元素的开始和结尾部分移除这些字符. 例如, 如果 <em>OmitChars</em> 是 <code>" `t"</code>, 那么每个元素中开始和结尾部分(但中间的不会) 的空格和 tab 会被移除.</p>
    <p>如果 <em>Delimiters</em> 为空, 那么 <em>OmitChars</em> 表示需要从数组中排除的那些字符.</p>
  </dd>

  <dt>MaxParts <span class="ver">[v1.1.28+]</span></dt>
  <dd>如果省略, 默认为 -1, 则表示 "没有限制". 否则, 请指定返回的子字符串的最大数目. 如果非零, 则字符串最多被分割 <em>MaxParts</em>-1 次, 并且在最后一个子字符串中返回字符串的其余部分(不包括任何前导或尾随的 <em>OmitChars</em>).</dd>

</dl>

<h2 id="Return_Value">返回值</h2>
<p>函数返回字符串<a href="../Objects.htm#Usage_Simple_Arrays">数组</a>(对象).</p>

<h2 id="Remarks">备注</h2>
<p>空格和 tab 等空白字符会被保留, 除非它们被作为分隔符或包含在 <em>OmitChars</em> 中. 调用 <a href="Trim.htm">Trim</a> 函数可以把空格和 tab 从每个变量的两端移除. 例如: <code>MyArray1 := Trim(MyArray1)</code>.</p>
<p>要分割标准 CSV(逗号分隔值) 格式的字符串, 请使用<a href="LoopParse.htm">解析循环</a>, 因为它具有内置的 CSV 处理功能.</p>
<p>要在拆分字段之前以不同的顺序排列, 请使用 <a href="Sort.htm">Sort</a> 命令.</p>
<p>如果不需要把子字符串长时间的存储到内存中, 建议使用<a href="LoopParse.htm">解析循环</a> -- 特别是当 <em>String</em> 非常大时, 在这种情况下, 将节省大量的内存. 例如:</p>
<pre>Colors := "red,green,blue"
Loop, Parse, Colors, % ","
    MsgBox % "Color number " A_Index " is " A_LoopField</pre>

<h2 id="Related">相关</h2>
<p><a href="StringSplit.htm">StringSplit</a>, <a href="LoopParse.htm">解析循环</a>, <a href="../misc/Arrays.htm">数组</a>, <a href="Sort.htm">Sort</a>, <a href="SplitPath.htm">SplitPath</a>, <a href="InStr.htm">InStr()</a>, <a href="SubStr.htm">SubStr()</a>, <a href="StrLen.htm">StrLen()</a>, <a href="StringLower.htm">StringLower</a>, <a href="StringLower.htm">StringUpper</a>, <a href="StrReplace.htm">StrReplace()</a></p>

<h2 id="Examples">示例</h2>
<div class="ex" id="ExSpace">
<p><a class="ex_number" href="#ExSpace"></a> 将一个句子拆分成单词数组, 并报告第四个单词.</p>
<pre>TestString := "This is a test."
word_array := StrSplit(TestString, A_Space, ".") <em>; 忽略句点.</em>
MsgBox % "The 4th word is " word_array[4]</pre>
</div>

<div class="ex" id="ExComma">
<p><a class="ex_number" href="#ExComma"></a> 将一个以逗号分隔的颜色列表拆分成一个子字符串数组, 并逐个遍历它们.</p>
<pre>colors := "red,green,blue"
for index, color in StrSplit(colors, ",")
    MsgBox % "Color number " index " is " color</pre>
</div>

</body>
</html>